package br.com.pucrs.tcc.bd;

import java.util.ArrayList;

import org.hibernate.Criteria;
import org.hibernate.SQLQuery;
import org.hibernate.Session;

import br.com.pucrs.tcc.ed.GrupoTrabalho;
import br.com.pucrs.tcc.ed.ProfessorPretendido;

public class ProfessorPretendidoBD {

	private Session mSession;

	public ProfessorPretendidoBD(Session session) {
		mSession = session;
	}

	public void insert(ProfessorPretendido professor) {
		mSession.save(professor);
		mSession.flush();
	}

	public void update(ProfessorPretendido professor) {
		mSession.update(professor);
	}

	public void delete(ProfessorPretendido professor) {
		mSession.delete(professor);
		mSession.flush();
	}

	public ProfessorPretendido retrieve(ProfessorPretendido professor) {
		ProfessorPretendido professorRetorno = null;

		Criteria criteria = mSession.createCriteria(ProfessorPretendido.class);
		// criteria.add(Restrictions.eq("id", grupo.getId()));

		professorRetorno = (ProfessorPretendido) criteria.uniqueResult();

		return professorRetorno;
	}

	public ArrayList<ProfessorPretendido> list(ProfessorPretendido professor) {
		ArrayList<ProfessorPretendido> listaRetorno = null;

		Criteria criteria = mSession.createCriteria(ProfessorPretendido.class);
		// criteria.add(Restrictions.eq("matricula", professor.getMatricula()));

		listaRetorno = (ArrayList<ProfessorPretendido>) criteria.list();

		if (listaRetorno != null) {
			System.out.println(listaRetorno.size());
		} else {
			System.out.println("AREA.NULL");
		}

		return listaRetorno;
	}

	public ArrayList<ProfessorPretendido> listaPorGrupo(GrupoTrabalho grupo) {
		ArrayList<ProfessorPretendido> listaRetorno = null;

		StringBuilder sql = new StringBuilder();
		sql.append("  SELECT * ");
		sql.append("    FROM professores_desejados ");
		sql.append("    WHERE grupos_trabalho_id = ?  ");
		sql.append(" ORDER BY ordem_preferencia ");

		SQLQuery query = mSession.createSQLQuery(sql.toString());
		query.setInteger(0, grupo.getId());
		query.addEntity(ProfessorPretendido.class);

		listaRetorno = (ArrayList<ProfessorPretendido>) query.list();

		return listaRetorno;
	}

	public void deletePorGrupo(GrupoTrabalho grupo) {
		StringBuilder sql = new StringBuilder();
		sql.append("DELETE FROM professores_desejados ");
		sql.append(" WHERE grupos_trabalho_id = ? ");

		SQLQuery query = mSession.createSQLQuery(sql.toString());
		query.setInteger(0, grupo.getId());

		query.executeUpdate();

	}
	
	public void deletePorProfessor(String matricula) {
		StringBuilder sql = new StringBuilder();
		sql.append("DELETE FROM professores_desejados ");
		sql.append(" WHERE professores_matricula = ? ");

		SQLQuery query = mSession.createSQLQuery(sql.toString());
		query.setString(0, matricula);

		query.executeUpdate();

	}

}
